<?php
/**
 * Created by PhpStorm.
 * User: Administrator
 * Date: 2018/4/3
 * Time: 14:04
 */

namespace app\index\controller;
use think\Controller;
// 验证器
//use app\validate\User; // 用户自定义的验证器
use app\facade\User;
use think\Validate;

class Demo10 extends Controller
{
    // 使用用户自定义的验证器
    public function test1(){
        $data = [
            'name'=>'ketianlin',
            'email'=>'abc@abc.com',
            'password'=>'222ddd',
            'mobile'=>'13699998888'
        ];
        // 验证器是一个类
        $validate = new User();
        if ( ! $validate->check($data)){
            return $validate->getError();
        }
        return '验证通过';
    }

    // 使用静态代理来验证
    public function test2(){
        $data = [
            'name'=>'ketianlin',
            'email'=>'abc@abc.com',
            'password'=>'222ddd',
            'mobile'=>'13699998888'
        ];
        // 使用当前验证器的静态代理
        if (!User::check($data)){
            return User::getError();
        }
        return '通过验证';
    }

    // 调用控制器中的validate方法进行验证：使用用户自定义的验证器/类
    public function test3(){
        // $this->validate($data, $validate)：返回验证结果

        // 要验证的数据
        $data = [
            'name'=>'ketianlin',
            'email'=>'abc@abc.com',
            'password'=>'222ddd',
            'mobile'=>'13699998888'
        ];

        // 验证规则
        $validate = 'app\validate\User';

        $res = $this->validate($data, $validate);
        if (true !== $res){
            return $res;
        }
        return '验证通过';


        /**
         * 验证器总结
         * 1. 验证器是一个自定义的类，必须继承于框架的验证类think\Validate.php
         * 2. 验证器可以创建在应用application目录下的任何一个可以访问的目录下面
         * 这个访问是指控制器可以访问，并不是指外部的URL访问,只需要指定正确的命名空间
         * 3. 验证器其实就是完成框架的think\Validate类中的属性protected $rule=[]初始化
         * 4. 在控制器中直接实例化调用check()完成验证
         * 5. 还可以创建一个自定义的静态代理，来统一验证方法的调用
         */
    }

    // 2. 独立验证：使用的是验证器类think\Validate中的rule()方法
    // rule()方法实际上就是完成给当前类的protected $rule = []初始化
    // 独立就是不依赖：不依赖于用户自定义的验证器类：app\validate\User.php
    public function test5(){
        // 创建验证规则
        $rule = [
            'name|姓名'=>[
                'require'=>'require',
                'min'=>5,
                'max'=>20
            ],
            'email|邮件'=>[
                'require'=>'require',
                'email'=>'email'
            ],
            'password|密码'=>[
                'require'=>'require',
                'min'=>3,
                'max'=>12,
                // 必须是字母+数字
                'alphaNum'=>'alphaNum'
            ],
            'mobile|手机'=>[
                'require'=>'require',
                'mobile'=>'mobile'
            ]
        ];

        // 添加字段的验证规则：初始化rule属性
        \think\facade\Validate::rule($rule);

        // 要验证的数据
        $data = [
            'name'=>'ketianlin',
            'email'=>'abc@abc.com',
            'password'=>'222ddd',
            'mobile'=>'13699998888'
        ];
        // 如果验证不通过，直接输出错误信息
        if( ! \think\facade\Validate::check($data)){
            return \think\facade\Validate::getError();
        }

        return '验证通过';
    }
}